﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SQLite;
using System.Data;

namespace Data
{
    public class HospedajeDataAccess
    {
        private SQLiteConnection con = DataBaseHelper.GetConnection("BDHostal.sqlite");
        private bool exitoRegistrar;
        private DataTable dt = new DataTable();
        private DataSet dataSet = new DataSet();

        public bool registrarHospedaje(string numeroDocumento, string numeroHabitacion, string fechaLlegada, string fechaSalida, string fechaRegistro)
        {
            using (var cmd = con.CreateCommand())
            {
                try
                {
                    con.Open();
                    cmd.CommandText = "INSERT INTO hospedajes(numeroHabitacion,numeroDocumento,fechaLlegada,fechaSalida,activo,fechaRegistro) VALUES ('" + numeroHabitacion + "','" + numeroDocumento + "','" + fechaLlegada + "','" + fechaSalida + "','si','" + fechaRegistro + "')";
                    cmd.ExecuteNonQuery();
                    exitoRegistrar = true;

                }
                catch (SQLiteException ex)
                {
                    exitoRegistrar = false;
                }
                finally
                {
                    cmd.Dispose();
                    con.Close();
                }
            }
            return exitoRegistrar;
        }

        public bool existeHospedaje(string numeroDocumento, string numeroHabitacion, string fechaLlegada, string fechaRegistro)
        {
            bool resultado;
            string cmd = "SELECT numeroHabitacion FROM hospedajes WHERE numeroDocumento='" + numeroDocumento + "' AND numeroHabitacion='" + numeroHabitacion + "' AND fechaLlegada='" + fechaLlegada + "' AND fechaRegistro='" + fechaRegistro + "' AND activo='no'";
            {
                try
                {
                    con.Open();
                    DataSet dataSet = new DataSet();
                    SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(cmd, con);
                    dataSet.Reset();
                    dataAdapter.Fill(dataSet);
                    DataTable dt = new DataTable();
                    dt = dataSet.Tables[0];

                    if (dt.Rows[0].Equals(null))
                        resultado = false;
                    else
                        resultado = true;
                }
                catch (SystemException ex)
                {
                    resultado = false;
                }
                finally
                {
                    con.Dispose();
                    con.Close();
                }
            }
            return resultado;
        }

        public void activarHospedaje(string numeroDocumento, string numeroHabitacion, string fechaLlegada, string fechaSalida, string fechaRegistro, string fechaRegistroAntiguo)
        {
            string cmd = "UPDATE hospedajes SET activo='si' ,fechaSalida ='" + fechaSalida + "' , fechaRegistro = '" + fechaRegistro + "' WHERE numeroDocumento ='" + numeroDocumento + "' AND numeroHabitacion = '" + numeroHabitacion + "' AND fechaLlegada ='" + fechaLlegada + "' AND fechaRegistro = '" + fechaRegistroAntiguo + "'";
            {
                try
                {
                    con.Open();
                    SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(cmd, con);
                    dataSet.Reset();
                    dataAdapter.Fill(dataSet);
                    dt = dataSet.Tables[0];
                }
                catch (SystemException ex)
                {
                }
                finally
                {
                    con.Close();
                }
            }
        }

        public DataTable buscarHospedaje(string numeroHabitacion)
        {
            string cmd = "SELECT DISTINCT fechaLlegada,fechaSalida,fechaRegistro,h.numeroDocumento,nombre,apellido FROM hospedajes h, clientes c WHERE numeroHabitacion = '"+numeroHabitacion+"' AND h.numeroDocumento=c.numeroDocumento AND activo='si' ORDER BY numeroHabitacion";
            {
                try
                {
                    con.Open();
                    SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(cmd, con);
                    dataSet.Reset();
                    dataAdapter.Fill(dataSet);
                    dt = dataSet.Tables[0];
                }
                catch (SystemException ex) { }
                finally
                {
                    con.Close();
                }
            }
            return dt;
        }

        public DataTable buscarHospedajeNombre(string nombre)
        {
            nombre = nombre.ToLowerInvariant();
            string cmd = "SELECT DISTINCT nombre,apellido,r.numeroDocumento,r.numeroHabitacion,fechaLlegada,fechaSalida,fechaRegistro FROM hospedajes r,clientes c WHERE (nombre like '" + nombre + "%' OR nombre like '% " + nombre + "%' OR apellido like '" + nombre + "%' OR apellido like '% " + nombre + "%') AND r.numeroDocumento = c.numeroDocumento AND r.activo='si'";
            {
                try
                {
                    con.Open();
                    SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(cmd, con);
                    dataSet.Reset();
                    dataAdapter.Fill(dataSet);
                    dt = dataSet.Tables[0];
                }
                catch (SystemException ex) { }
                finally
                {
                    con.Close();
                }
            }
            return dt;
        }

        public DataTable buscarTodosDatos(string numeroDocumento, string fechaLlegada, string fechaRegistro)
        {
            //string cmd = "SELECT DISTINCT numeroHabitacion,fechaLlegada,FechaSalida,nombre,apellido,r.numeroDocumento,email,telefono,celular,notas,tipo,fechaRegistro FROM habitacion h,hospedajes r,clientes c WHERE activo='si' AND r.numeroDocumento = c.numeroDocumento AND r.numeroDocumento = '" + numeroDocumento + "' AND fechaLlegada='" + fechaLlegada + "' AND fechaRegistro='" + fechaRegistro + "' AND r.numeroHabitacion = h.numero";
            string cmd = "SELECT DISTINCT numeroHabitacion,fechaLlegada,FechaSalida,nombre,apellido,r.numeroDocumento,email,telefono,celular,notas,tipo,fechaRegistro FROM habitacion h,hospedajes r,clientes c WHERE activo='si' AND r.numeroDocumento = c.numeroDocumento AND r.numeroDocumento = '" + numeroDocumento + "' AND fechaLlegada='" + fechaLlegada + "' AND r.numeroHabitacion = h.numero";            
            {
                try
                {
                    con.Open();
                    SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(cmd, con);
                    dataSet.Reset();
                    dataAdapter.Fill(dataSet);
                    dt = dataSet.Tables[0];
                }
                catch (SystemException ex) { }
                finally
                {
                    con.Close();
                }
            }
            return dt;
        }

        public void cancelarHospedaje(string numeroHabitacion, string numeroDocumento, string fechaLlegada)
        {
            string cmd = "UPDATE hospedajes SET activo='no' WHERE numeroDocumento ='" + numeroDocumento + "' AND numeroHabitacion = '" + numeroHabitacion + "' AND fechaLlegada='" + fechaLlegada + "' AND activo='si'";
            {
                try
                {
                    con.Open();
                    SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(cmd, con);
                    dataSet.Reset();
                    dataAdapter.Fill(dataSet);
                    dt = dataSet.Tables[0];
                }
                catch (SystemException ex) { }
                finally
                {
                    con.Close();
                }
            }
        }

        public void habilitarHospedaje(string numeroHabitacion, string numeroDocumento, string fechaLlegada)
        {
            string cmd = "UPDATE hospedajes SET activo='si' WHERE numeroDocumento ='" + numeroDocumento + "' AND numeroHabitacion = '" + numeroHabitacion + "' AND fechaLlegada='" + fechaLlegada + "' AND activo='no'";
            {
                try
                {
                    con.Open();
                    SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(cmd, con);
                    dataSet.Reset();
                    dataAdapter.Fill(dataSet);
                    dt = dataSet.Tables[0];
                }
                catch (SystemException ex) { }
                finally
                {
                    con.Close();
                }
            }
        }

        public void cancelarHospedajeNumeroHabitacion(string numeroHabitacion)
        {
            string cmd = "UPDATE hospedajes SET activo='no' WHERE numeroHabitacion = '" + numeroHabitacion + "' AND activo='si'";
            {
                try
                {
                    con.Open();
                    SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(cmd, con);
                    dataSet.Reset();
                    dataAdapter.Fill(dataSet);
                    dt = dataSet.Tables[0];
                }
                catch (SystemException ex) { }
                finally
                {
                    con.Close();
                }
            }
        }

        public bool registrarHospedajeExitosos(string numeroDocumento, string numeroHabitacion, string fechaLlegada, string fechaSalida, string fechaRegistro)
        {
            using (var cmd = con.CreateCommand())
            {
                try
                {
                    con.Open();
                    cmd.CommandText = "INSERT INTO hospedajesExitosos(numeroHabitacion,numeroDocumento,fechaLlegada,fechaSalida,fechaRegistro) VALUES ('" + numeroHabitacion + "','" + numeroDocumento + "','" + fechaLlegada + "','" + fechaSalida + "','" + fechaRegistro + "')";
                    cmd.ExecuteNonQuery();
                    exitoRegistrar = true;

                }
                catch (SQLiteException ex)
                {
                    exitoRegistrar = false;
                }
                finally
                {
                    cmd.Dispose();
                    con.Close();
                }
            }
            return exitoRegistrar;
        }

        public bool buscarHospedajeUnico(string numeroHabitacionAntigua)
        {
            bool existe = true;
            string cmd = "SELECT numeroHabitacion FROM hospedajes WHERE numeroHabitacion = '" + numeroHabitacionAntigua + "'";
            {
                try
                {
                    con.Open();
                    SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(cmd, con);
                    dataSet.Reset();
                    dataAdapter.Fill(dataSet);
                    dt = dataSet.Tables[0];
                    if (dt.Rows.Count > 1)
                        existe = false;
                }
                catch (SystemException ex) { }
                finally
                {
                    con.Close();
                }
            }
            return existe;
        }
    }
}
